home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / gnu_st.lha / gnu_st / smalltalk-1.1.1 / stix / generr.st < prev    next >
Text File  |  1991-09-12  |  7KB  |  200 lines

  1. "======================================================================
  2. |
  3. | Copyright (C) 1990, 1991 Free Software Foundation, Inc.
  4. | Written by Steve Byrne.
  5. |
  6. | This file is part of GNU Smalltalk.
  7. |
  8. | GNU Smalltalk is free software; you can redistribute it and/or modify it
  9. | under the terms of the GNU General Public License as published by the Free
  10. | Software Foundation; either version 1, or (at your option) any later version.
  11. | GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
  12. | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  13. | FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  14. | details.
  15. | You should have received a copy of the GNU General Public License along with
  16. | GNU Smalltalk; see the file COPYING.  If not, write to the Free Software
  17. | Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  
  18. |
  19.  ======================================================================"
  20.  
  21.  
  22. "
  23. |     Change Log
  24. | ============================================================================
  25. | Author       Date       Change 
  26. | sbyrne     24 May 90      created.
  27. |
  28. "
  29.  
  30. Smalltalk at: #DataTypeMap put: Dictionary new.
  31. Smalltalk at: #DataTypeSize put: Dictionary new!
  32.  
  33.  
  34. DataTypeMap at: #card8 put: #ubyte.
  35. DataTypeMap at: #bool put: #byte.
  36. DataTypeMap at: #keycode put: #byte.
  37. DataTypeMap at: #card16 put: #uword.
  38. DataTypeMap at: #int16 put: #word.
  39. DataTypeMap at: #setOfKeyButMask put: #word.
  40. DataTypeMap at: #card32 put: #ulong.
  41. DataTypeMap at: #window put: #long.
  42. DataTypeMap at: #drawable put: #long.
  43. DataTypeMap at: #atom put: #long.
  44. DataTypeMap at: #colormap put: #long.
  45. DataTypeMap at: #timestamp put: #long.
  46.  
  47.  
  48.  
  49. DataTypeSize at: #card8 put: 1.
  50. DataTypeSize at: #bool put: 1.
  51. DataTypeSize at: #keycode put: 1.
  52. DataTypeSize at: #card16 put: 2.
  53. DataTypeSize at: #int16 put: 2.
  54. DataTypeSize at: #setOfKeyButMask put: 2.
  55. DataTypeSize at: #card32 put: 4.
  56. DataTypeSize at: #window put: 4.
  57. DataTypeSize at: #drawable put: 4.
  58. DataTypeSize at: #atom put: 4.
  59. DataTypeSize at: #colormap put: 4.
  60. DataTypeSize at: #timestamp put: 4
  61. !
  62.  
  63. !Object class methodsFor: 'hacking'!
  64.  
  65. genErrorInit
  66.     | stream |
  67.     stream _ FileStream open: 'Xerr.st' mode: 'w'.
  68.     stream close.
  69. !
  70.  
  71. genErrorClass: className args: anArray
  72.     | stream |
  73.     stream _ FileStream open: 'Xerr.st' mode: 'a'.
  74.     self genErrorClassDef: className on: stream args: anArray.
  75.     self genErrorClassMethods: className on: stream args: anArray.
  76.     stream nextPut: Character newPage.
  77.     stream nl.
  78.     stream close
  79. !
  80.  
  81. " private definitions "
  82.  
  83. genErrorClassDef: className on: aStream args: anArray
  84.     self genClassDef: 'Error' forClass: className on: aStream args: anArray
  85. !
  86.  
  87. genClassDef: type forClass: className on: aStream args: anArray
  88.     'X', type, ' subclass: #' printOn: aStream.
  89.     className, type printOn: aStream.
  90.     aStream nl.
  91.     self genClassInstVars: anArray on: aStream.
  92. '    classVariableNames: ''''
  93.     poolDictionaries: ''''
  94.     category: ''X hacking''
  95. !' printOn: aStream.
  96.     aStream nl.
  97.     aStream nl
  98. !
  99.  
  100. genErrorClassMethods: className on: aStream args: anArray
  101.     self genClassMethods: 'Error' forClass: className on: aStream args: anArray
  102. !
  103.  
  104. genClassMethods: type forClass: className on: aStream args: anArray
  105.     | totalBytes dataType | 
  106.     '!', className, type, ' class methodsFor: ''instance creation''!
  107.  
  108. newFrom: aStream
  109.     ^self new initFrom: aStream
  110. !!
  111.  
  112. ' printOn: aStream.
  113.     '!', className, type ' methodsFor: ''private''!
  114.  
  115. ' printOn: aStream.
  116. 'initFrom: aStream' printOn: aStream.  aStream nl.
  117.     totalBytes _ 0.
  118.     anArray do:
  119.     [ :var | '    ' printOn: aStream.
  120.          var size > 1
  121.              ifTrue: [ (var at: 1) printOn: aStream.
  122.                    ' _ ' printOn: aStream ].
  123.          'aStream ' printOn: aStream.
  124.          dataType _ (var at: var size).
  125.                  (self mapType: dataType) printOn: aStream.
  126.          totalBytes _ totalBytes + (self typeSize: dataType).
  127.          '. ' printOn: aStream. aStream nl ].
  128.     '    aStream skipBytes: ' printOn: aStream.
  129.     (30 - totalBytes) printOn: aStream.
  130.     aStream nl.
  131.     '!!' printOn: aStream.
  132.     aStream nl.
  133.     aStream nl.
  134. !
  135.  
  136. mapType: aType
  137.     ^DataTypeMap at: aType
  138.          ifAbsent: [ self error: 'no such type: ', (aType printString) ]
  139. !
  140.  
  141. typeSize: aType
  142.     ^DataTypeSize at: aType
  143.              ifAbsent: [ self error: 'no such type: ', (aType printString) ]
  144. !    
  145.  
  146. genClassInstVars: anArray on: aStream
  147.     | varName |
  148.     aStream tab.
  149.     'instanceVariableNames: ''' printOn: aStream.
  150.     anArray do: 
  151.     [ :var | var size = 2
  152.              ifTrue: [ (#(sequenceNumber minorOp majorOp)
  153.                    indexOf: (varName _ var at: 1)) = 0
  154.                    ifTrue: [ varName, ' ' printOn: aStream ] ]
  155.              ].
  156.     '''' printOn: aStream.
  157.     aStream nl
  158. !!
  159.  
  160. Object genErrorInit.
  161. Object genErrorClass: 'Request' 
  162.     args: #((sequenceNumber card16) (card32) (minorOp card16) (majorOp card8)).
  163. Object genErrorClass: 'Value'
  164.     args: #((sequenceNumber card16) (badValue card32) (minorOp card16) (majorOp card8)).
  165. Object genErrorClass: 'Window' 
  166.     args: #((sequenceNumber card16) (badId card32) (minorOp card16) (majorOp card8)).
  167. Object genErrorClass: 'Pixmap'
  168.     args: #((sequenceNumber card16) (badId card32) (minorOp card16) (majorOp card8)).
  169. Object genErrorClass: 'Atom'
  170.     args: #((sequenceNumber card16) (badId card32) (minorOp card16) (majorOp card8)).
  171. Object genErrorClass: 'Cursor'
  172.     args: #((sequenceNumber card16) (badId card32) (minorOp card16) (majorOp card8)).
  173. Object genErrorClass: 'Font' 
  174.     args: #((sequenceNumber card16) (badId card32) (minorOp card16) (majorOp card8)).
  175. Object genErrorClass: 'Match'
  176.     args: #((sequenceNumber card16) (card32) (minorOp card16) (majorOp card8)).
  177. Object genErrorClass: 'Drawable'
  178.     args: #((sequenceNumber card16) (badId card32) (minorOp card16) (majorOp card8)).
  179. Object genErrorClass: 'Access' 
  180.     args: #((sequenceNumber card16) (card32) (minorOp card16) (majorOp card8)).
  181. Object genErrorClass: 'Alloc'
  182.     args: #((sequenceNumber card16) (card32) (minorOp card16) (majorOp card8)).
  183. Object genErrorClass: 'Colormap' 
  184.     args: #((sequenceNumber card16) (badId card32) (minorOp card16) (majorOp card8)).
  185. Object genErrorClass: 'GContext' 
  186.     args: #((sequenceNumber card16) (badId card32) (minorOp card16) (majorOp card8)).
  187. Object genErrorClass: 'IDChoice'
  188.     args: #((sequenceNumber card16) (badId card32) (minorOp card16) (majorOp card8)).
  189. Object genErrorClass: 'Name'
  190.     args: #((sequenceNumber card16) (card32) (minorOp card16) (majorOp card8)).
  191. Object genErrorClass: 'Length'
  192.     args: #((sequenceNumber card16) (card32) (minorOp card16) (majorOp card8)).
  193. Object genErrorClass: 'Implementation'
  194.     args: #((sequenceNumber card16) (card32) (minorOp card16) (majorOp card8))
  195. !
  196.  
  197. Smalltalk quitPrimitive!
  198.